The invention relates generally to computer graphics, and more specifically to multi-resolution three-dimensional meshes.
Rendering of three-dimensional objects on a computer screen is a process that typically involves defining the object to be rendered in detail, creation of a mesh that models the visible surfaces of the object, and rendering and shading of the mesh. Such a mesh typically comprises a number of interconnected triangles defined by a number of vertices in three-dimensional space. Very detailed geometric models have become common in defining three-dimensional objects to be rendered as meshes, and require a very large number of vertices and faces in a mesh to produce a realistic rendering. Applications ranging from advanced CAD/CAM and graphics to computer games increasingly require greater levels of realism and detail in the objects rendered, and so require efficient processing and display of three dimensional meshes.
Detailed three-dimensional objects are often rendered as a mesh of polygons, such as a triangle mesh, that is produced and sent to a rendering pipeline to be rendered as a visible image on a monitor. The meshes produced as a result of 3-D modeling operations are often relatively large and processor-intensive to render, and so multiple meshes that represent the same three-dimensional object may be produced containing different levels of detail and used at various times depending on the desired object resolution. An object that appears very small when rendered to a monitor may need relatively few defining triangles to be realistically rendered by a triangle mesh, while the same object viewed more closely or rendered larger in size will require substantially more triangles to render a realistic image.
Such an object must be represented by a detailed mesh if it is to be viewed closely or rendered large in size, but processing all the detailed mesh information for such an object when rendered as a very small or distant object unnecessarily uses valuable rendering processor time. In such a case, a greatly simplified mesh could be rendered to produce as realistic an image as would be rendered with the detailed mesh definition, and would require substantially less computation to render. But, efficient generation of an appropriately detailed mesh for the desired rendered object resolution and level of detail is not a trivial task.
A three-dimensional model can simply be reprocessed to derive a new mesh of appropriate resolution and detail once the optimal mesh resolution is known, but this requires substantial processing at the time of rendering. Several meshes of varying resolutions can be produced and stored before rendering of images employing the modeled object, but storage of meshes of several resolutions consumes valuable storage space. Generation and storage of multiple meshes also will likely not produce a mesh of optimal resolution for a specific size rendering of the object, requiring either loss of detail in rendering a smaller mesh or unneeded processing in rendering a more detailed mesh. Furthermore, switching between meshes of substantially different resolution can produce visual artifacts when rendered, such as what is known in the art as model popping.
Various methods, including optimizing meshes for rendering efficiency and compression of meshes have been developed, but fail to provide an efficient means for providing a mesh of arbitrary resolution or detail for rendering. A better method is therefore needed of producing a mesh of an arbitrary resolution, in a manner that is efficient both in the amount of processing required and in storage space needed.
A method of incrementally varying the resolution of a multi-resolution mesh with a plurality of vertices and faces is provided. A vertex is added to the mesh if the resolution is incrementally increasing, and a vertex is deleted from the mesh if the resolution is incrementally decreasing. Faces of the mesh are updated if needed. Faces are added to the mesh if needed when a vertex is added, and faces are deleted from the mesh if needed when a vertex is deleted.